//express中间件的调用流程
/**
 * 当一个请求到达Express的服务器之后，可以连续调用多个中间件，从而对这次请求进行预处理
 *
 * Express中间件格式
 *
 * 本质就是一个function处理函数，格式如下：
 *
 * app.get('/',function(req,res,next){
 *      next();
 * })
 *
 * 注意：
 * 中间件函数的形参列表中，必须包含next参数，并且函数体中调用了next。
 * 而路由处理函数中只包含req和res
 *
 * next函数的作用
 * next函数是实现多个中间件连续调用的关键，
 * 表示把流转关系转交给下一个中间件或路由
 *
 */
const express = require("express");
const router = require("./router");
const app = express();

//1.    定义中间件函数
const mw = function (req, res, next) {
  console.log("这是一个最简单的中间件函数");
  //注意：在当前中间件的业务处理完毕后，必须调用next()函数
  //表示把流转关系转交个下一个中间件或路由
  next();
};

//2.    全局生效的中间件
//客户端发起的任何请求，到达服务器之后，都会触发的中间件，叫做全局生效的中间件
//通过调用app.use(中间件函数)，即可定义一个全局生效的中间件。

//全局生效的中间件
app.use(mw);
//定义全局中间件的简化形式
app.use(function (req, res, next) {
  console.log("简化形式的中间件");
  next();
});
/**
 * 中间件作用
 *  多个中间件之间，共享同一份req和res。
 *  因此，在上游中间件中，统一为req或res对象添加自定义的属性或方法，供下游的中间件或路由进行使用
 */

app.use("/api", router);

app.listen(80, () => {
  console.log("express server running at http://localhost:80 ");
});
